An important development in computer processing has been systems having more than one processor, each capable of independent action to execute applications programming. Different program tasks may be assigned to different processors, with the result that the execution time of the programming is substantially reduced. One approach to dividing tasks in a multiprocessor system is designating subprograms, which link into a main program running on a first processor, for execution by a second processor.
Where designated subprograms are to be executed by a second processor, a problem with implementing such a division of tasks is that the second processor needs certain information about the subprograms passed to it. Because of the difficulty in programming a solution to this problem, some multiprocessor systems have a second processor whose functions are fixed. The user cannot add new functions and is limited to the functions provided with the processor.
In other multiprocessor systems, a programmer may add functions, but must either create a support routine to permit the second processor to receive the function, or use a nonstandard format when defining the function. For this reason, regardless of whether the programmer wrote his or her own function definitions or obtained pre-written function definitions from another, substantial programming effort is required to ensure that the added function would operate in the multiprocessor system.
Thus, a need exists for a multiprocessor system in which functions are extensible. The programmer should not be limited to using only a set number of functions that the second processor is capable of understanding and should be able to add functions to be executed by the second processor with a minimum of programming effort.
One response to this need has been the use of a "generic entry point" method. A number of entry point commands are provided, each associated with certain characteristics of function arguments and return values, if any. Each entry point command invokes an associated communications routine that handles the transfer, from one processor system to another, of the particular argument format and return requirements of that entry point command. Typically, the communications routine uses a communications buffer accessible by both processors to transfer data. Yet, when the buffer has a fixed size, a need exists to handle situations in which the size of the argument data exceeds the size of the buffer.